from datetime import datetime,timedelta,timezone
now = datetime.now()
print(now)
x = now.timestamp()
x = 387264832
newnow = datetime.fromtimestamp(x)
print(newnow)

# 很多时候，用户输入的日期和时间是字符串，要处理日期和时间，首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现，需要一个日期和时间的格式化字符串

cdady = datetime.strptime('2018-09-22 19:34:33', '%Y-%m-%d %H:%M:%S')
print(type(cdady))
print(cdady)

# 如果已经有了datetime对象，要把它格式化为字符串显示给用户，就需要转换为str，转换方法是通过strftime()实现的，同样需要一个日期和时间的格式化字符串：

now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))

# 日期和时间进行加减实际上就是把datetime往后或往前计算，得到新的datetime。加减可以直接用+和-运算符，不过需要导入timedelta这个类
now = datetime.now()
subnow = now + timedelta(hours=10)
z = now + timedelta(hours=10,days=10)
print(subnow)
print(z)

# 本地时间转换为UTC时间
# 本地时间是指系统设定时区的时间，例如北京时间是UTC+8:00时区的时间，而UTC时间指UTC+0:00时区的时间
# datetime类型有一个时区属性tzinfo，但是默认为None，所以无法区分这个datetime到底是哪个时区，除非强行给datetime设置一个时区
tz_utc_8 = timezone(timedelta(hours=8))
now = datetime.now()
dt = now.replace(tzinfo=tz_utc_8)
print(dt)
print(now)



# 时区转换

# 我们可以先通过utcnow()拿到当前的UTC时间，再转换为任意时区的时间
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
# astimezone() 将转换时区为北京时间
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(bj_dt)
#时区转换的关键在于，拿到一个datetime时，要获知其正确的时区，然后强制设置时区，作为基准时间。
#利用带时区的datetime，通过astimezone()方法，可以转换到任意时区


